package com.eunion.boot.spring;

import java.util.Locale;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.support.RequestContextUtils;

/**
 * 国际化服务.
 * 
 * @since 2017年2月5日
 */
@Component
public class LocaleMessageSourceService {

	@Resource
	private MessageSource messageSource;

	/**
	 * @param code ：对应messages配置的key.
	 * @return
	 */
	public String getMessage(String code) {
		return getMessage(code, null);
	}

	/**
	 *
	 * @param code ：对应messages配置的key.
	 * @param args : 数组参数.
	 * @return
	 */
	public String getMessage(HttpServletRequest request,String code, Object[] args) {
		return getMessage(request,code, args, "");
	}

	/**
	 * @param code ：对应messages配置的key.
	 * @return
	 */
	public String getMessage(HttpServletRequest request,String code) {
//		request = null;
//		request = SpringUtil.getRequest(); 
		return getMessage(request,code, null);
//		return getMessage(code, null);//debug model
	}

	/**
	 *
	 * @param code ：对应messages配置的key.
	 * @param args : 数组参数.
	 * @return
	 */
	public String getMessage(String code, Object[] args) {
		return getMessage(code, args, "");
	}

	/**
	 *
	 * @param code ：对应messages配置的key.
	 * @param args : 数组参数.
	 * @param defaultMessage : 没有设置key的时候的默认值.
	 * @return
	 */
	public String getMessage(String code, Object[] args, String defaultMessage) {
		//这里使用比较方便的方法，不依赖request.
		//LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
		Locale locale = LocaleContextHolder.getLocale();
		return messageSource.getMessage(code, args, defaultMessage, locale);
	}

	/**
	 *
	 * @param code ：对应messages配置的key.
	 * @param args : 数组参数.
	 * @param defaultMessage : 没有设置key的时候的默认值.
	 * @return
	 */
	public String getMessage(HttpServletRequest request,String code, Object[] args, String defaultMessage) {
		//这里使用比较方便的方法，不依赖request.
//		LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
		Locale locale = RequestContextUtils.getLocale(request);
		return messageSource.getMessage(code, args, defaultMessage, locale);
	}

}
